#include <bits/stdc++.h>
// 2025/01/31
// tag:
// Author: Zhang Muen
using namespace std;

int m, vis[150][150];
char out[150], g[150];
stack<int> ans;

void dfs(int x)
{
    for (int i = 0; i < 150; i++) {
        if (vis[x][i] > 0) {
            vis[x][i]--, vis[i][x]--;
            dfs(i);
        }
    }
    ans.push(x);
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> m;
    for (int i = 0; i < m; i++) {
        char u, v;
        cin >> u >> v;
        vis[u][v]++, vis[v][u]++;
        out[u]++, out[v]++;
    }
    int s = 0, s1 = 0, cnt = 0;
    for (int i = 0; i < 150; i++){
        if (out[i] & 1) {
            cnt++;
            if (!s)
                s = i;
        }
        if (out[i] > 0 && !s && out[i] % 2 == 0) 
            s1 = i;
        if (cnt > 2) {
            cout << "No Solution" << endl;
            return 0;
        }
    }
    if (!s)
        s = s1;
    dfs(s);
    if (ans.size() != m + 1) {
        cout << "No Solution" << endl;
        return 0;
    }
    for (int j = 0; j <= m; j++) {
        cout << char(ans.top());
        ans.pop();
    }
    return 0;
}